var app = {
	id : 1,
	container : null,
	isWindowOS : function() {
		return window.navigator.userAgent.indexOf('Windows') != -1;
	},
	getId : function(prefix) {
		this.id++;
		if (prefix) {
			return prefix + "_" + this.id;
		} else {
			return "hna_" + this.id;
		}
	},
	getDB : function() {
		return window.openDatabase("catemanagement", "1.0", "catemanagement", 20000000);
	},
	initLinks : function(name) {
		// toolbar imediate click
		$('#' + name + '  a').bind('touchstart', new Function("$('#" + this.name + "  a').removeClass('clicked');" + "$(this).addClass('clicked');"));
		// list click when not scrolling
		$('#' + name + '  a').click(new Function("$('#" + name + " a').removeClass('clicked');" + "$(this).addClass('clicked');"));
	},
	loadHtmlById : function(id, html) {
		$('#' + id).empty();
		$('#' + id).append(html);
		this.initLinks(id);
	},
	loadHTML : function(html, params, callback, trans) {
		if (document.activeElement && document.activeElement.blur) {
			document.activeElement.blur();
		}
		if (params == null && trans != null) {
			params = {
				transition : trans
			}
		}
		container.loadHTML(html, params, callback);
	},
	loadPage : function(html, params, callback, trans) {
		if (document.activeElement && document.activeElement.blur) {
			document.activeElement.blur();
		}
		if (params == null && trans != null) {
			params = {
				transition : trans
			}
		}
		container.loadPage(html, params, callback);
	},
	loadPageSildeRight : function(html, params, callback) {
		if (params == null) {
			params = {
				transition : 'slide-right'
			}
		} else {
			params.transition = 'slide-right';
		}
		container.loadPage(html, params, callback);
	},
	loadPageSildeLeft : function(html, params, callback) {
		if (params == null) {
			params = {
				transition : 'slide-left'
			}
		} else {
			params.transition = 'slide-left';
		}
		container.loadPage(html, params, callback);
	},
	mask : function() {
		$('body').append('<div id="mask_div"><div class=\"x-mask\"></div><center><div class=\"progress\">正在处理,请稍候...</div></center></div>');
	},
	unmask : function() {
		$('#mask_div').remove();
	},
	checkUpdate : function() {
		cordova.exec(function(data) {
			console.log(data);
			console.log("1");
		}, function(data) {
			console.log(data);
			console.log("2");
		}, "UpdatePlugin", "checkUpdate", []);
	},
	test : function() {
		for (var i = 0; i < 35; i++) {
			bill.addBill((i % 2 == 0));
		}
	}
};

var msg = {
	toast : function(msg) {
		var msgDiv = $("<div>", {
			class : "msg"
		})
		msgDiv.append('<p>' + msg + '</p>')
		msgDiv.appendTo("#msg-div");
		msgDiv.fadeOut(3000);

	},
	comfirm : function(title, msg, positionCallback, cancelCallback) {
		if ($('#overlay_box').length > 0) {
			return;
		}
		if ($('.x-mask').length > 0) {
			return;
		}
		var id = app.getId();
		var templateData = {
			id : id,
			title : title,
			msg : msg,
			positiveText : '确定',
			negativeText : '取消',
			positionCallback : positionCallback,
			cancelCallback : cancelCallback
		};
		jsTouch.overlayTemplate('templates/msg_template.html', templateData, {
			modal : true
		}, function() {
			var btns = $('#' + id + ' > .footer a');
			if (positionCallback) {
				btns.eq(0).click(positionCallback);
			}
			if (cancelCallback) {
				btns.eq(1).click(cancelCallback);
			} else {
				btns.eq(1).click(function() {
					jsTouch.overlayClose();
				});
			}

		});
	}
}
app.msg = msg;

// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// (new Date()).format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
Date.prototype.format = function(fmt) { // author: meizz
	var o = {
		"M+" : this.getMonth() + 1, // 月份
		"d+" : this.getDate(), // 日
		"h+" : this.getHours(), // 小时
		"m+" : this.getMinutes(), // 分
		"s+" : this.getSeconds(), // 秒
		"q+" : Math.floor((this.getMonth() + 3) / 3), // 季度
		"S" : this.getMilliseconds()
		// 毫秒
	};
	if (/(y+)/.test(fmt))
		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
	for (var k in o)
		if (new RegExp("(" + k + ")").test(fmt))
			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
	return fmt;
}
var checkUpdateCallBack = function(result) {
	app.unmask();
	if (result.hasNewVersion == true) {
		app.msg.comfirm('提示', "有新的版本是否要更新?", function() {
			app.update();
		})
	} else {
		if (result.msg) {
			alert(result.msg);
		} else {
			alert("没有可用更新");
		}
	}
}
var checkUpdate = function() {
	cordova.exec(checkUpdateCallBack, checkUpdateCallBack, "UpdatePlugin", "checkUpdate", []);
}
app.checkUpdate = function() {
	app.mask();
	window.setTimeout(checkUpdate, 50);
}

var updateCallBack = function(result) {
	alert(1);
	if (result.success == true) {
		jsTouch.overlayClose();
	}
}
app.update = function() {
	cordova.exec(updateCallBack, updateCallBack, "UpdatePlugin", "update", []);
}